# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import frappe
import requests
from frappe import _

@frappe.whitelist()
def test_connection():
    """测试到 MaxKey 服务器的连接"""
    try:
        config = frappe.get_doc("MaxKey SSO Settings")
        if not config.enabled:
            frappe.msgprint(_("请先启用 MaxKey SSO"))
            return False
            
        # 尝试访问 MaxKey 的某个端点
        # frappe.msgprint(_("正在连接到 MaxKey 服务器: {}").format(config.base_url))
        
        try:
            # 增加超时时间到 5 秒
            response = requests.get(config.base_url, timeout=5)
            if response.status_code == 200:
                return True
            else:
                frappe.msgprint(_("服务器返回状态码: {}").format(response.status_code))
                return False
        except requests.exceptions.Timeout:
            frappe.msgprint(_("连接超时，请检查服务器地址是否正确并且服务器可用"))
            return False
        except requests.exceptions.ConnectionError:
            frappe.msgprint(_("连接错误，无法连接到服务器，请检查网络或服务器配置"))
            return False
        except Exception as e:
            # 截断错误消息，确保不超过允许的长度
            error_msg = str(e)
            if len(error_msg) > 100:
                error_msg = error_msg[:100] + "..."
            frappe.msgprint(_("连接错误: {}").format(error_msg))
            return False
    except Exception as e:
        # 截断错误消息，确保不超过允许的长度
        error_msg = str(e)
        if len(error_msg) > 100:
            error_msg = error_msg[:100] + "..."
        # 限制错误日志长度
        frappe.log_error(f"测试 MaxKey 连接出错: {error_msg}", "MaxKey SSO Error")
        frappe.msgprint(_("读取配置时出错，请确认已正确设置 MaxKey SSO"))
        return False

def update_oauth_apps_config(doc, method=None):
    """
    当配置更新时，更新 OAuth 应用配置
    这个函数通过文档事件钩子调用
    """
    # 仅当 MaxKey SSO Settings 被更新时执行操作
    if doc.doctype == "MaxKey SSO Settings":
        try:
            # 可能的额外配置操作
            pass
        except Exception as e:
            # 截断错误消息，确保不超过允许的长度
            error_msg = str(e)
            if len(error_msg) > 100:
                error_msg = error_msg[:100] + "..."
            frappe.log_error(f"更新 OAuth 配置时出错: {error_msg}", "MaxKey SSO Error")

